import router from './router'
import store from './store'
import { Message } from 'element-ui'
import NProgress from 'nprogress' // progress bar
import 'nprogress/nprogress.css' // progress bar style
import { getToken } from '@/utils/auth' // get token from cookie
import getPageTitle from '@/utils/get-page-title'

NProgress.configure({ showSpinner: false }) // NProgress Configuration

const whiteList = ['/login', '/auth-redirect'] // no redirect whitelist

//本地使用
router.beforeEach(async (to, from, next) => {
  // start progress bar
  NProgress.start()

  // set page title
  document.title = getPageTitle(to.meta.title)

  // determine whether the user has logged in
  const hasToken = getToken()
  console.log("看是否有token" + hasToken)
  if (hasToken) {
    if (to.path === '/login') {
      // if is logged in, redirect to the home page
      next({ path: '/' })
      NProgress.done() // hack: https://github.com/PanJiaChen/vue-element-admin/pull/2939
    } else {
      // determine whether the user has obtained his permission roles through getInfo
      const hasRoles = store.getters.roles && store.getters.roles.length > 0
      if (hasRoles) {
        next()
      } else {
        try {
          // get user info
          // note: roles must be a object array! such as: ['admin'] or ,['developer','editor']
          const { roles } = await store.dispatch('user/getInfo')

          // generate accessible routes map based on roles
          const accessRoutes = await store.dispatch('permission/generateRoutes', roles)

          // dynamically add accessible routes
          router.addRoutes(accessRoutes)

          // hack method to ensure that addRoutes is complete
          // set the replace: true, so the navigation will not leave a history record
          next({ ...to, replace: true })
        } catch (error) {
          // remove token and go to login page to re-login
          await store.dispatch('user/resetToken')
          Message.error(error || 'Has Error')
          next(`/login?redirect=${to.path}`)
          NProgress.done()
        }
      }
    }
  } else {
    /* has no token*/

    if (whiteList.indexOf(to.path) !== -1) {
      // in the free login whitelist, go directly
      next()
    } else {
      // other pages that do not have permission to access are redirected to the login page.
      next(`/login?redirect=${to.path}`)
      NProgress.done()
    }
  }
})

//生产使用
//路由前置守卫
// router.beforeEach((to, from, next) => {
//   console.log("进入路由")
//   console.log('路由拦截to：', to)
//   // console.log("路由拦截from：", from)
//   const whitelist = ['/401'] // 设置白名单，即允许直接访问的路由路径
//   //判断是否跳到中心页
//   // if (to.name === 'home' && from.name === null) {
//   //   next()
//   // }
//   //暂时注解
//   if (whitelist.includes(to.path)) {
//     next()
//   } else {
//     // if (localStorage.getItem('tagNaveList')) {
//     //   const token = (JSON.parse(localStorage.getItem('tagNaveList'))[0].query.access_token);
//     // const token=store.state.token
//     let token = ''
//     if (to.name === 'home' && from.name === null) {
//       console.log('进入home')
//       // 使用URLSearchParams解析查询参数
//       const queryParams = new URLSearchParams(window.location.search)

//       // 获取token
//       token = queryParams.get('access_token')
//     } else {
//       console.log("进入555")
//       // const token=localStorage.getItem('access_token')
//       if (localStorage.getItem('tagNaveList')) {
//         token = JSON.parse(localStorage.getItem('tagNaveList'))[0].query.access_token
//       }
//     }
//     if (token) {
//       console.log(token, 'token找到')
//       axios
//         .get('http://11.71.3.110:30010/iam/v1/users/self', {
//           headers: {
//             Authorization: 'Bearer ' + token, // 实际的用户token
//           },
//         })
//         .then((response) => {
//           console.log('wai response', response.data)

//           // localStorage.setItem('userInfo', JSON.stringify(response))
//           // 如果返回用户信息，则表示token 有效
//           // console.log('用户信息：', response.data);
//           // axios.post('http://index.iosp.xjyt.petrochina/zh/docs/service/iam/api-permission/', {
//           //   headers: {
//           //     'Authorization': 'Bearer ' + token  // 实际的用户token
//           //   }
//           // }).then((res)=>{
//           //   console(res)
//           // })
//           /////////////////////////////////
//           // 带着用户信息去请求菜单
//           // axios.get(`http://11.71.3.110:30010/iam/v1/menus/tree?labels=GCYRDCHQKF&lang=${response.data.language}&roleId=${response.data.currentRoleId}&unionLabel=false`, {
//           //   headers: {
//           //     'Authorization': 'Bearer ' + token  // 实际的用户token
//           //   }
//           // }
//           if (isFirst) {
//             store.commit('setUserName', response.data.realName)
//             store.commit('setUserId', response.data.id)
//             store.commit('setCurrentRoleId', response.data.currentRoleId)
//             store.commit('setCurrentRoleName', response.data.currentRoleName)
//             store.commit('setCurrentRoleLevel', response.data.currentRoleLevel)
//             store.commit('setCurrentLoginName', response.data.loginName)
//             store.commit('setOrganizationId', response.data.organizationId)
//             //动态路由暂时注释
//             axios
//               .get(`http://11.71.3.110:30010/iam/v1/menus/tree?labels=GCYRDCHQKF&lang=${response.data.language}&roleId=${response.data.currentRoleId}&unionLabel=false`, {
//                 headers: {
//                   Authorization: 'Bearer ' + token, // 实际的用户token
//                 },
//               })
//               .then((response) => {
//                 console.log('iam/v1/menus/tree', response.data)
//                 let res = response.data
//                 const dynamicRoutes = generateRoutesFromMenu(res[0].subMenus)
//                 store.commit('updateMenu', dynamicRoutes)
//                 console.log('dynamicRoutes', dynamicRoutes)
//                 console.log('router为', router)
//                 // dynamicRoutes.forEach(i => {
//                 //   router.options.routes.push(i)
//                 //   router.addRoute(i)
//                 // })
//                 router.addRoutes(dynamicRoutes)
//                 console.log('addRoutes之后router为', router)
//                 next({ ...to, replace: true })
//                 console.log('menuList:', store.getters.menuList)
//               })
//               .catch((error) => {
//                 console.log('iam/v1/menus/tree的错误为', error)
//               })
//             // getMenuTree(token).then(response => {
//             //   let res = JSON.parse(response.data.data)
//             //   console.log('getMenuTree', res)
//             // })
//             isFirst = !isFirst
//             // getMenuTree(token).then(response => {
//             //   console.log('response', response)
//             //   // let account = response.data
//             //   // account.menus = res.data

//             //   // console.log(res.data[0].subMenus)
//             //   let res = JSON.parse(response.data.data)
//             //   // console.log(res)

//             //   //将菜单接口获取到的重构为前端可用的为动态路由(切换静态可暂时注释)
//             //   const dynamicRoutes = generateRoutesFromMenu(res[0].subMenus)
//             //   store.commit('updateMenu', dynamicRoutes)
//             //   // router.addRoutes(dynamicRoutes)
//             //   console.log('dynamicRoutes', dynamicRoutes)
//             //   dynamicRoutes.forEach(i => {
//             //     router.options.routes.push(i)
//             //     router.addRoute(i)
//             //   })
//             //   next({ ...to, replace: true })
//             //   isFirst = !isFirst

//             // console.log(dynamicRoutes)
//             //添加动态路由
//             // dynamicRoutes.forEach(res=>{
//             //   router.addRoute(res)
//             //   console.log(res)
//             // })
//             // router.options.routes=routes.push(dynamicRoutes)
//             // router.addRoutes(dynamicRoutes)
//             // router.resolve({name:'rs'}).route.matched、
//             //暂时注释(这里是为了加载侧边栏)
//             // store.commit('updateMenu', dynamicRoutes)
//             // store.commit('updateMenu', routes)
//             // let routes1 = store.state.app.routes
//             // console.log('routes1', routes1)

//             // console.log(store.state.app.routes)
//             // routes1.forEach(i => {
//             //   router.options.routes.push(i)
//             //   router.addRoute(res)
//             // })
//             // for(let i=0,length=routes1.length;i<length;i+=1){
//             //   const element=routes1[i]
//             //   router.addRoute(element)
//             // }
//             // router.options.isAddAsyncMenuData=true

//             //暂时注释
//             // router.matcher=new VueRouter({routes:routes1,mode:'history'}).matcher
//             // console.log('router', router)
//             // router.addRoutes(dynamicRoutes)

//             // router.options.routes = routes.concat(routes1)
//             // for (let i = 0, length = routes1.length; i < length; i += 1) {
//             //   const element = routes1[i]
//             //   console.log(element)
//             //   router.addRoute(element)
//             // }
//             // next({ ...to, replace: true })

//             // router.matcher=new VueRouter({routes:routes1}).matcher
//             // router.addRoutes(routes1)

//             //hack方法：确保添加路由已完成，添加完新路由并不会触发新的导航，需重定向使其生效
//             // next({ ...to, replace: true })

//             // if (account) {
//             //   sessionStorage.setItem('account', JSON.stringify(account))
//             // }
//             // })
//           }
//         })
//         .catch((error) => {
//           // 如果报错，则代表token失效，需要重新登录
//           console.error('校验失败：', error)
//           // 进行重新登录操作
//           window.location.href = 'http://11.71.3.110:30011/public/unauthorized'
//         })
//       next()
//     } else {
//       console.log('token找不到')
//       // 说明没有登陆，则重定向到登陆页
//       next({ name: 'error_401' })
//     }
//   }
// })


router.afterEach(() => {
  // finish progress bar
  NProgress.done()
})


// 根据菜单数据生成路由配置
const generateRoutesFromMenu = (menuData) => {
  let routes = []
  //遍历菜单里的所有一级目录
  menuData.forEach((item) => {
    let route = {
      path: item.route,
      name: item.name,
      meta: {
        title: item.name,
        // icon: item.icon
      },
      component: Main,
      children: [],
    }
    if (item.subMenus && item.subMenus.length > 0) {
      item.subMenus.forEach((child) => {
        let childRoute = {
          path: child.route,
          name: child.name,
          meta: {
            title: child.name,
            // icon: child.icon
          },
          component: () => import(`@/view-my${item.route}/index.vue`),
          // component: () => import("@/view-my"+item.route+"/index.vue"),
          // component: (resolve) => require([`@/view-my${item.route}/index.vue`],resolve)
        }
        route.children.push(childRoute)
      })
    }
    routes.push(route)
  })
  return routes
}
